/**
 * @param {string[]} strs
 * @return {string[][]}
 */
var groupAnagrams = function(strs) {
  // 函数
  function getAlphaArr(str) {
    let temp = new Array(26).fill(0);
    for(let i = 0; i < str.length; i++) {
      const index = str[i].charCodeAt() - 'a'.charCodeAt();
      temp[index]++;
    }
    return temp;
  }

  function equal(arr1, arr2) {
    for(let i = 0; i < arr1.length; i++) {
      if(arr1[i] != arr2[i])
        return false;
    }
    return true;
  }

  function cmpChar(a, b) {
    return a[0].charCodeAt() - b[0].charCodeAt();
  }

  function cmp(a, b) {
    return a.length - b.length;
  }
  // 1.暴力解法
  // let result = [];

  // for(let i = 0; i < strs.length; i++) {
  //   // 用于判断循环内部是否已经做了处理
  //   let flag = true, temp = getAlphaArr(strs[i]);
  //   for(let j = 0; j < result.length; j++) {
  //     let nowAlpha = getAlphaArr(result[j][0]);
  //     if(equal(nowAlpha, temp)) {
  //       result[j].push(strs[i]);
  //       flag = false;
  //     }
  //   }
  //   if(flag) {
  //     result.push([strs[i]]);
  //   }
  // }

  // // 排序
  // for(let i = 0; i < result.length; i++) {
  //   if(result[i].length > 1 && result[i][0] !== "") {
  //     result[i].sort(cmpChar);
  //   }
  // }

  function strCmp(a, b) {
    return a.charCodeAt() - b.charCodeAt();
  }
  // 2.map+排序
  let map = new Map(), result = [];
  for(let i = 0; i < strs.length; i++) {
    let s = strs[i];
    s = s.split("").sort(strCmp).join("");
    if(!map.get(s)) {
      map.set(s, [strs[i]]);
    } else {
      map.get(s).push(strs[i]);
    }
  }
  for(var key of map.keys()) {
    result.push(map.get(key));
  }
  result.sort(cmp);
  for(let i = 0; i < result.length; i++) {
    if(result[i].length > 1 && result[i][0] !== "") {
      result[i].sort(cmpChar);
    }
  }
  return result;
};
let strs = ["eat", "tea", "tan", "ate", "nat", "bat"];
console.log(groupAnagrams(strs));
strs = [""];
console.log(groupAnagrams(strs));
strs = ["a"];
console.log(groupAnagrams(strs));
strs = ["",""];
console.log(groupAnagrams(strs));
strs = [""];
console.log(groupAnagrams(strs));

